//package com.example.everying.service.order.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.example.everying.constant.OrderConstants;
//import com.example.everying.model.dto.order.OrderInfoEntityDto;
//import com.example.everying.model.dto.order.OrderInfoPageDto;
//import com.example.everying.model.dto.order.OrderUpdateDto;
////import com.example.everying.service.order.OrderInfoService;
//import com.example.everying.utils.CampusException;
//import com.example.everying.utils.WeChatUtil;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.math.BigDecimal;
//import java.time.LocalDateTime;
//import java.util.List;
//import java.util.Objects;
//
//@Service
//public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfoEntity> implements OrderInfoService {
//
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public boolean createOrder(OrderInfoEntityDto orderInfoEntityDto) {
//        // 1. 检查是否已有订单关联该活动
//        List<OrderInfoEntity> existingOrders = baseMapper.selectList(
//                new LambdaQueryWrapper<OrderInfoEntity>()
//                        .eq(OrderInfoEntity::getActivityId, orderInfoEntityDto.getActivityId())
//        );
//
//        OrderInfoEntity newOrder = new OrderInfoEntity();
//        newOrder.setOrderNo(WeChatUtil.generateTradeNumber(OrderConstants.TRANSACTION_TYPE_PREFIX_ORDER));
//        newOrder.setActivityId(orderInfoEntityDto.getActivityId());
//        newOrder.setAcceptorId(orderInfoEntityDto.getAcceptorId());
//        newOrder.setOrderAmount(orderInfoEntityDto.getOrderAmount());
//        newOrder.setPublisherId(orderInfoEntityDto.getPublisherId());
//
//        newOrder.setOrderStatus(OrderConstants.ORDER_STATUS_WAIT_PAY);
//
//        if (existingOrders.isEmpty())  {
//            // 2. 第一个接单人 - 创建独立订单
//            newOrder.setOrderType(OrderConstants.ORDER_TYPE_SINGLE);
//            newOrder.setOrderNo(WeChatUtil.generateTradeNumber(OrderConstants.TRANSACTION_TYPE_PREFIX_ORDER));
//            return save(newOrder);
//        } else {
//            // 3. 已有订单存在，检查是否需要创建父订单
//            OrderInfoEntity parentOrder = existingOrders.stream()
//                    .filter(order -> OrderConstants.ORDER_TYPE_PARENT.equals(order.getOrderType()))
//                    .findFirst()
//                    .orElse(null);
//
//            if (parentOrder == null && existingOrders.size()  == 1) {
//                // 3.1 只有一个独立订单存在，将其升级为父订单
//                OrderInfoEntity firstOrder = existingOrders.get(0);
//                firstOrder.setOrderType(OrderConstants.ORDER_TYPE_PARENT);
//                updateById(firstOrder);
//
//                // 3.2 当前订单作为子订单
//                newOrder.setOrderType(OrderConstants.ORDER_TYPE_CHILD);
//                newOrder.setParentOrderId(firstOrder.getId());
//            } else {
//                // 3.3 已有父订单，直接创建子订单
//                newOrder.setOrderType(OrderConstants.ORDER_TYPE_CHILD);
//                newOrder.setParentOrderId(parentOrder  != null ?
//                        parentOrder.getId()  :
//                        existingOrders.get(0).getParentOrderId());
//            }
//
//            return save(newOrder);
//        }
//    }
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public boolean updateOrder(OrderUpdateDto updateDto) {
//        // 1. 获取原始订单
//        OrderInfoEntity originalOrder = getById(updateDto.getOrderId());
//        if (originalOrder == null) {
//            throw new CampusException("订单不存在",201);
//        }
//
//        // 2. 构建更新对象
//        OrderInfoEntity updateOrder = new OrderInfoEntity();
//        updateOrder.setId(updateDto.getOrderId());
//        updateOrder.setUpdateTime(LocalDateTime.now());
//
//        // 3. 处理不同修改类型
//        switch (updateDto.getUpdateType())  {
//            case OrderConstants.UPDATE_TYPE_STATUS:
//                handleStatusUpdate(originalOrder, updateOrder, updateDto.getStatus());
//                break;
//            case OrderConstants.UPDATE_TYPE_AMOUNT:
//                handleAmountUpdate(originalOrder, updateOrder, updateDto.getAmount());
//                break;
//            case OrderConstants.UPDATE_TYPE_INFO:
//                handleInfoUpdate(updateOrder, updateDto);
//                break;
//            default:
//                throw new CampusException("不支持的修改类型",201);
//        }
//
//        // 4. 执行更新
//        boolean success = updateById(updateOrder);
//
//        // 5. 处理关联订单状态同步
//        if (success && updateDto.isSyncRelatedOrders())  {
//            syncRelatedOrders(originalOrder, updateDto);
//        }
//
//        return success;
//    }
//
//    /**
//     * @param pageParam
//     * @param dto
//     * @return
//     */
//    @Override
//    public IPage<OrderInfoEntity> selectPage(Page<OrderInfoEntity> pageParam, OrderInfoPageDto dto) {
//        QueryWrapper<OrderInfoEntity> queryWrapper = new QueryWrapper<>();
//        queryWrapper.orderByDesc("create_time");
//        if (dto.getOrderNo() != null && !dto.getOrderNo().isEmpty()) {
//            queryWrapper.eq("order_no", dto.getOrderNo());
//        }
//        if (dto.getOrderStatus() != null && !dto.getOrderStatus().isEmpty()) {
//            queryWrapper.eq("order_status", dto.getOrderStatus());
//        }
//        if (dto.getActivityId() != null && !dto.getActivityId().isEmpty()) {
//            queryWrapper.eq("activity_id", dto.getActivityId());
//        }
//        if (dto.getPublisherId() != null && !dto.getPublisherId().isEmpty()) {
//            queryWrapper.eq("publisher_id", dto.getPublisherId());
//        }
//        if (dto.getAcceptorId() != null && !dto.getAcceptorId().isEmpty()) {
//            queryWrapper.eq("acceptor_id", dto.getAcceptorId());
//        }
//        if (dto.getStartTime() != null && dto.getEndTime() != null) {
//            queryWrapper.between("create_time", dto.getStartTime(), dto.getEndTime());
//        }
//        return baseMapper.selectPage(pageParam, queryWrapper);
//    }
//
//    /**
//     * 处理订单状态变更
//     */
//    private void handleStatusUpdate(OrderInfoEntity original, OrderInfoEntity update, Integer newStatus) {
//        if (Objects.equals(original.getOrderStatus(),  newStatus)) {
//            return;
//        }
//
//        // 状态校验（如：已完成的订单不能退回待支付）
//        if (OrderConstants.ORDER_STATUS_COMPLETED.equals(original.getOrderStatus()))  {
//            throw new CampusException("已完成订单不可修改状态",201);
//        }
//
//        update.setOrderStatus(newStatus);
//
//    }
//
//    /**
//     * 处理金额变更
//     */
//    private void handleAmountUpdate(OrderInfoEntity original, OrderInfoEntity update, BigDecimal newAmount) {
//        // 金额修改只允许在待支付状态
//        if (!OrderConstants.ORDER_STATUS_WAIT_PAY.equals(original.getOrderStatus()))  {
//            throw new RuntimeException("当前状态不可修改金额");
//        }
//
//        // 如果是父订单，需要同步更新所有子订单金额（按比例分摊）
//        if (OrderConstants.ORDER_TYPE_PARENT.equals(original.getOrderType()))  {
//            throw new RuntimeException("请调用父订单专用金额修改接口");
//        }
//
//        update.setOrderAmount(newAmount);
//    }
//
//    /**
//     * 处理普通信息变更
//     */
//    private void handleInfoUpdate(OrderInfoEntity update, OrderUpdateDto dto) {
//        // 可修改的普通字段（根据业务需求开放）
//        if (dto.getRemark()  != null) {
//            update.setRemark(dto.getRemark());
//        }
//
//
//    }
//
//    /**
//     * 同步关联订单状态
//     */
//    private void syncRelatedOrders(OrderInfoEntity original, OrderUpdateDto dto) {
//        // 如果是子订单状态变更，且需要同步父订单
//        if (OrderConstants.ORDER_TYPE_CHILD.equals(original.getOrderType())
//                && dto.getStatus()  != null) {
//
//            // 获取所有兄弟订单（同一个父订单下的其他子订单）
//            List<OrderInfoEntity> siblingOrders = list(new LambdaQueryWrapper<OrderInfoEntity>()
//                    .eq(OrderInfoEntity::getParentOrderId, original.getParentOrderId())
//                    .ne(OrderInfoEntity::getId, original.getId()));
//
//            // 检查是否所有子订单都达到相同状态
//            boolean allSameStatus = siblingOrders.stream()
//                    .allMatch(order -> order.getOrderStatus().equals(dto.getStatus()));
//
//            // 如果所有子订单状态一致，自动更新父订单状态
//            if (allSameStatus) {
//                OrderInfoEntity parentUpdate = new OrderInfoEntity();
//                parentUpdate.setId(original.getParentOrderId());
//                parentUpdate.setOrderStatus(dto.getStatus());
//                parentUpdate.setUpdateTime(LocalDateTime.now());
//                updateById(parentUpdate);
//            }
//        }
//
////        // 如果是父订单状态变更，且需要同步子订单（谨慎使用）
////        if (OrderConstants.ORDER_TYPE_PARENT.equals(original.getOrderType())
////                && dto.getStatus()  != null
////                && dto.isForceSyncChildren())  {
////
////            // 批量更新所有子订单状态
////            OrderInfoEntity childUpdate = new OrderInfoEntity();
////            childUpdate.setOrderStatus(dto.getStatus());
////            childUpdate.setUpdateTime(LocalDateTime.now());
////
////            update(childUpdate, new LambdaQueryWrapper<OrderInfoEntity>()
////                    .eq(OrderInfoEntity::getParentOrderId, original.getId()));
////        }
//    }
//}